# 工具链配置
CXX      := g++
CXXFLAGS := -std=c++11 -Wall -Wextra -Isrc
LDFLAGS  := 
DEBUG    ?= 1

# 调试模式配置
ifeq ($(DEBUG), 1)
    CXXFLAGS += -g -O0
else
    CXXFLAGS += -O2
endif

# 目录和文件
TARGET   := main
SRC_DIR  := src
SRCS     := $(wildcard $(SRC_DIR)/*.cpp)
OBJS     := $(patsubst $(SRC_DIR)/%.cpp,%.o,$(SRCS))  # 修改点1：简化对象文件路径
DEPFILES := $(OBJS:.o=.d)

# 默认目标
all: $(TARGET)

# 链接可执行文件
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)

# 编译规则（修改点2：统一使用模式规则）
%.o: $(SRC_DIR)/%.cpp
	$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@

# 清理
clean:
	rm -f $(TARGET) $(OBJS) $(DEPFILES)

# 包含依赖文件
-include $(DEPFILES)

.PHONY: all clean